'''
基础语句
'''
print(r'第1部分')
# 注释方法1：前面加上【#】
print(r'[# 注释方法1：前面加上【#】]')

# 注释方法2：开头和结尾加上【3个双引号】
print(r'["""注释方法2：开头和结尾加上【3个双引号】"""]')

# 注释方法3：开头和结尾加上【3个双引号】
print(r"['''注释方法3：开头和结尾加上【3个双引号】''']")

"""
1、执行顺序从上到下
2、缩进是4个空格
3、能输出数字，能输出字符串
4、输出计算结果
"""
print(1)
if 1 < 2:
    print(r'1小于2')
print(3)
a = 1
b = 3
print(a+b)


# 字符串可以换行
str1 = ('换行的字符串换行的字符串换行的字符串换行的字符串换行的字符串换行的字符串换行的字符串'
        '换行的字符串换行的字符串换行的字符串')
print(str1,end='\n')
str2 = '''换行的字符串换行的字符串换行的字符串换行的字符串换行的字符串换行的字符串换行的字符串
换行的字符串换行的字符串换行的字符串'''
print(str2,end='\n')


############################################################################################
print('\n第2部分')
"""
关键字

import keyword
print(keyword.kwlist)
keyword关键字不能当对象【例如 keyword=1】
"""
# 下面是关键字列表
keyword_print = ['False', 'None', 'True', 'and', 'as', 'assert', 'async', 'await', 'break', 'class', 'continue', 'def',
                 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is',
                 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']

############################################################################################
print('\n第3部分')
f"""
标识符,即是对象    命名注意事项
1、区分大小写，下方是例子A、a
2、不可以用关键字{keyword_print}
3、不可以【数字开头】，【首字符必须是 英文字母 或 下划线】，后面可以【接上数字、英文、下划线】
4、下划线开头有特殊意义：   _单下划线表示私有属性（私有对象）,  __下划线表示私有方法（私有函数）
5、最好15个字符以内
6、多个单词可以用 _下划线 进行组合
7、命名方法
    小驼峰（第一个单词首字母小写，第二个单词首字母也是大写），常用于变量名（如下方的A、a）
    大驼峰（第一个单词首字母是大写，后面单词首字母也是大写），常用于类名、接口名、枚举、命名空间
"""
nameAge = 1
nameage = 2
print(f'nameAge的{nameAge}')  # nameAge=1
print(f'nameage的{nameage}')  # nameage=2

############################################################################################
print('\n第4部分')
f"""
变量
1、什么是变量：变量是用来存放数据的（如a=1后面又a=2，输出a得到2，a存放的数据改变了）
2、每个变量都有：变量本身的值、值的类型、内存地址（如a）
"""
a = 1
print(f'a={a}')  # a=1
a = 2
print(f'a={a}')  # a=2
print('a的类型', type(a))  # a的类型 <class 'int'>
print('a的地址', id(a))  # a的地址 140709711762248

############################################################################################
print('\n第5部分')
"""
数据类型
1、整形int 1，2，3.....98，99....
2、浮点数float   0.1 0.2 1.3 6.3 7.1
3、字符串string ‘a12d’
4、布尔值bool  True False 【bool=False的：零0，空字符串''，空列表[],空集合()，空字典{} 【不空就是True】 】
"""
print('整形int  ', 1, type(1))
print('浮点数float  ', 1.2, type(1.2))
print('字符串string  ', '字符串string123', type('字符串string123'))
print(bool(1),  # True
      bool(0),  # 零0
      bool(''),  # 空字符串
      bool([]),  # 空列表
      bool(set()),  # 空集合
      bool(tuple()),  # 空元组
      bool({})  # 空字典
      )

"""
值的转换
"""
print('整数转换')
num = 1
print('整数', num, type(num))
print('转换浮点数', float(num), type(float(num)))
print('转换字符串', str(num), type(str(num)))  # 转换后不能计算

num = 1.7
print('浮点数', num, type(num))
print('转换整数', int(num), type(int(num)))  # 去掉包括小数点之后的部分
print('转换字符串', str(num), type(str(num)))  # 转换后不能计算

num = '7'
print('字符串', num, type(num))
print('转换整数', int(num), type(int(num)))  # 如果是浮点数字符串（如1.6）会转换失败
print('转换浮点数', float(num), type(float(num)))

print('整数加上浮点数结果还是浮点数如1.2 + 1=', 1.2 + 1, type(1.2 + 1))  # 去掉包括小数点之后的部分

############################################################################################
print('\n第6部分')
'''
输出函数print
'''
print('1', 2, 'abc', 2-5)
print('1', 2, 'abc', 2-5, sep=';')  # sep多个输出的分隔符
print(2, end='结束\n')  # end输出的结尾,默认换行符\n

name = '王小明'
n = 6
age = 17
score = 99.5
print(f'他的名字是{name}，年龄是{age}')
print('他的名字是 %s，年龄是%d，成绩是%f分' % (name, age, score))
print('他的排名是第%d名' % n)


print('他的名字是 {}，年龄是{}，成绩是{}分'.format(name, age, score))
print('他的排名是第{}名'.format(n))


############################################################################################
print('\n第7部分')
'''
输入函数input
'''
# a = input('请输入您想说的：')
# print(f'您想说的是{a}，默认输入类型为字符串')

############################################################################################
print('\n第8部分')

'''
算数运算符  +    -   *   /   //  %   **
赋值运算符  +=   -=   *=   /=   //=  %=   **=
比较运算符  小于<   大于>   等于==   小于等于<=   大于等于>=  不等于!=
逻辑运算符   与或非 and or  not
同一运算符   is      is not
成员运算符   in(在指定的序列list，string之内)      not in（和in相反）

位运算符
位与运算符&
位或运算符|
位异运算符^
'''
a = 10
b = 2
c = 3
print(a+b)  # a+2结果为12
print(a-b)  # a-2结果为8
print(a*b)  # a*2结果为20
print(a/b)  # a/2结果为5.0
print(a//b)  # a//2结果为5
print(a//c)  # a//3结果为3，结果取整
print(a % b)  # a/2余数为0
print(a % c)  # a/3余数为1
print(a**b)  # a的b次方100

print('与', 1 and 7, 7 and 0, 7 and False, True and False)  # 与 7 0 False False
print('或', 7 or 1, 7 or 0, True or False)  # 或 7 7 True
print('非', not 7, not 1, not 0, not False)  # 非 False False True True
# 同一运算符
print(a is a, a is b, a is not b, a is not a)  # True False True False
# 成员运算符
list1 = [a,b]  # [10, 2]
print(a in list1, 6 in list1, 6 not in list1, a not in list1)  # True False True False


'''
位运算符
位与运算符&
位或运算符|
位异运算符^
位取运算符~
二进制左移<< 移动1位相当于*2
二进制右移>> 移动1位相当于/2
'''
a = 6
b = 3
print(a & b)  # 6(0110) & 3(0011) 结果为 2(0010)
print(a | b)  # 6(0110) | 3(0011) 结果为 7(0111)
print(a ^ b)  # 6(0110) & 3(0011) 结果为 5(0101)
print(~6)  # 6(0110) 结果为 -4('-0100')  # 开头+变为-，
print('左移', 3 << 2)  # 左移 12
print('左移', 3 << 1)  # 左移 6
print('右移', 20 >> 1)  # 右移 10
print('右移', 5 >> 1)  # 右移 2
